package com.hymjweb.demo.framework.util.util;

import com.hymjweb.demo.framework.bean.DropListBean;
import com.hymjweb.demo.framework.util.DataTypeUtil;
import net.sourceforge.pinyin4j.PinyinHelper;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class PinYinUtils {
    /**
     * 获取汉字首字母的方法。如： 张三 --> ZS
     * 说明：暂时解决不了多音字的问题，只能使用取多音字的第一个音的方案
     *
     * @param hanzi 汉子字符串
     * @return 大写汉子首字母; 如果都转换失败,那么返回null
     */

    public static String getHanziInitials(String hanzi) {
        String result = null;
        if (null != hanzi && !"".equals(hanzi)) {
            char[] charArray = hanzi.toCharArray();
            StringBuffer sb = new StringBuffer();
            for (char ch : charArray) {
                // 逐个汉字进行转换， 每个汉字返回值为一个String数组（因为有多音字）
                String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
                if (null != stringArray) {
                    sb.append(stringArray[0].charAt(0));
                }
            }
            if (sb.length() > 0) {
                result = sb.toString().toUpperCase();
            }
        }
        return result;
    }


    /**
     * 获取汉字拼音的方法。如： 张三 --> zhangsan
     * 说明：暂时解决不了多音字的问题，只能使用取多音字的第一个音的方案
     *
     * @param hanzi 汉子字符串
     * @return 汉字拼音; 如果都转换失败,那么返回null
     */
    public static String getHanziPinYin(String hanzi) {
        String result = null;
        if (null != hanzi && !"".equals(hanzi)) {
            char[] charArray = hanzi.toCharArray();
            StringBuffer sb = new StringBuffer();
            for (char ch : charArray) {
                // 逐个汉字进行转换， 每个汉字返回值为一个String数组（因为有多音字）
                String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
                if (null != stringArray) {
                    // 把第几声这个数字给去掉
                    sb.append(stringArray[0].replaceAll("\\d", ""));
                }
            }
            if (sb.length() > 0) {
                result = sb.toString();
            }
        }
        return result;
    }

    /**
     * 完成对数据库中查询出来的下拉列表名称集合的处理，并返回符合条件的数据
     * @param beans
     * @param map
     * @return
     */
    public static List<DropListBean> getBeanPinyingList(List<DropListBean> beans, Map map){
        List<DropListBean> resultList=new ArrayList<>();
        // 调用java工具类实现汉字转拼音
        for(DropListBean bean:beans){
            bean.setFullPinyin(PinYinUtils.getHanziPinYin(bean.getName()));
            bean.setCamelCharPinyin(PinYinUtils.getHanziInitials(bean.getName()));
            String key= DataTypeUtil.toNotNullString(map.get("key"));  // 这个key是默认的下拉列表传入的key,不要在前端去改动
            if(key!=null && !"".equals(key)){
                if(bean.getCamelCharPinyin().toLowerCase().contains(key.toLowerCase()) || bean.getFullPinyin().toLowerCase().contains(key.toLowerCase()) || bean.getName().contains(key)){
                    resultList.add(bean);
                }
            }
        }
        return resultList;
    }


    public static void main(String[] args) {

        System.out.println(PinYinUtils.getHanziInitials("袁素芳"));

        System.out.println(PinYinUtils.getHanziPinYin("袁素芳"));

    }
}
